/*  
  订单详情页面，有两种方式跳转：
    1. 商品详情页面 - 点击立即购买 - 确定 （购买一个商品）
      调用立即购买接口得到商品数据（需要商品id和祝福语）
      将商品id和祝福语传递到订单详情页面，去发送请求
    2. 购物车页面 - 点击去结算 （购买多个商品 - 所有购物车选中的商品）
      调用确认下的接口得到商品数据（不需要额外参数）

  来到订单详情页面，得到要购买的商品数据，进行展示
*/
import {
  getGoodsListByBuyNowApi,
  getGoodsListByShopcartApi,
  submitOrderApi,
  getWeiXinPayParamsApi,
} from "../../../api/order";
import { getOrderAddressApi } from "../../../api/address";
import dayjs from "dayjs";

Page({
  /**
   * 页面的初始数据
   */
  data: {
    buyName: "", // 购买人名称
    buyPhone: null, // 购买人手机号
    deliveryDate: "请选择配送时间", // 期望送达日期
    remarks: "", // 客户备注
    totalAmount: "", // 总价
    cartList: [], // 购物车列表
    isShowPopup: false, // 日期选项卡显示与隐藏
    minDate: new Date().getTime(), // 可选最小时间格式
    currentDate: new Date().getTime(), // 当期时间
    address: {},
  },

  handleShowPopup() {
    this.setData({
      isShowPopup: true,
    });
  },

  /**
   * 点击日期timepicker取消按钮
   */
  hanleCancelTimePicker() {
    this.setData({
      isShowPopup: false,
    });
  },

  handleConfirmTimePicker(e) {
    const deliveryDate = dayjs(e.detail).format("YYYY-MM-DD");
    this.setData({
      deliveryDate,
      isShowPopup: false,
    });
  },

  // 提交订单 -> 得到订单号
  async submitOrder() {
    const { buyName, buyPhone, cartList, deliveryDate, remarks, address } =
      this.data;
    const orderNo = await submitOrderApi({
      buyName,
      buyPhone,
      cartList,
      deliveryDate,
      remarks,
      userAddressId: address.id,
    });
    this.getWeiXinPayParams(orderNo);
  },
  // 微信下单 -> 得到支付参数
  async getWeiXinPayParams(orderNo) {
    const res = await getWeiXinPayParamsApi(orderNo);
    /*
      nonceStr: "4JB4axXAeSTQ43zk" 随机字符串
      timeStamp: "1690361489661"   时间戳
      paySign: "FEB671783669079955C405E61625A6BB" 签名（随机字符串 + 时间戳按照某种算法计算得到签名）
      package: "prepay_id=wx261651295728859ebb1e55d78a278f0000" 
      signType: "MD5"
    */
    this.weixinPay(res);
  },
  // 微信支付
  weixinPay(res) {
    wx.requestPayment({
      timeStamp: res.timeStamp,
      nonceStr: res.nonceStr,
      package: res.package,
      signType: res.signType,
      paySign: res.paySign,
      success: (result) => {
        console.log("success", result);
      },
      fail: (err) => {
        console.log("fail", err);
      },
    });
  },
  /**
   * 关闭日期选项卡
   *
   */

  onClose() {
    this.setData({
      isShowPopup: false,
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const { goodsId, blessing } = options;
    if (goodsId) {
      this.getGoodsListByBuyNow(goodsId, blessing);
    } else {
      this.getGoodsListByShopcart();
    }
  },
  // 获取商品列表
  async getGoodsListByBuyNow(goodsId, blessing) {
    const res = await getGoodsListByBuyNowApi(goodsId, blessing);
    this.setData({
      totalAmount: res.totalAmount,
      cartList: res.cartVoList,
    });
  },
  async getGoodsListByShopcart() {
    const res = await getGoodsListByShopcartApi();
    this.setData({
      totalAmount: res.totalAmount,
      cartList: res.cartVoList,
    });
  },
  // 获取地址
  async getOrderAddress() {
    const address = await getOrderAddressApi();
    this.setData({
      address,
    });
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getOrderAddress();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
